package com.jcloud.codetest1.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class MyDate {
    private static final Logger logger = LoggerFactory.getLogger(MyDate.class);


    public static Date convertSafeHatTime2Date(Long time){
        return new Date(time);
    }

    /**
     * 返回字符型日期
     *
     * @param date
     *            日期
     * @return 返回字符型日期
     */
    public static String getDate(Date date)
    {
        return formatDateByFormat(date, "yyyyMMdd");
    }

    /**
     * 返回字符型时间
     *
     * @param date
     *            日期
     * @return 返回字符型时间
     */
    public static String getTime(Date date)
    {
        return formatDateByFormat(date, "HHmmss");
    }

    /**
     * 返回字符型日期时间
     *
     * @param date
     *            日期
     * @return 返回字符型日期时间
     */
    public static String getDateTime(Date date)
    {
        return formatDateByFormat(date, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 常用的格式化日期
     *
     * @param date
     *            Date
     * @param srcFormat
     *            String
     * @return String
     */
    public static String formatDate(Date date, String format)
    {
        // return formatDateByFormat(date,"yyyy-MM-dd");
        return formatDateByFormat(date, format);
    }

    public static String formatDate(Date date)
    {
        return formatDateByFormat(date,"yyyy-MM-dd");
    }


    /**
     * 以指定的格式来格式化日期
     *
     * @param date
     *            Date
     * @param format
     *            String
     * @return String
     */
    public static String formatDateByFormat(Date date, String format)
    {
        String result = "";
        if (date != null)
        {
            try
            {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                result = sdf.format(date);
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 返回年份
     *
     * @param date
     *            日期
     * @return 返回年份
     */
    public static int getYear(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.YEAR);
    }

    /**
     * 返回月份
     *
     * @param date
     *            日期
     * @return 返回月份
     */
    public static int getMonth(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MONTH) + 1;
    }

    /**
     * 返回日份
     *
     * @param date
     *            日期
     * @return 返回日份
     */
    public static int getDay(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 返回小时
     *
     * @param date
     *            日期
     * @return 返回小时
     */
    public static int getHour(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 返回分钟
     *
     * @param date
     *            日期
     * @return 返回分钟
     */
    public static int getMinute(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MINUTE);
    }

    /**
     * 返回秒钟
     *
     * @param date
     *            日期
     * @return 返回秒钟
     */
    public static int getSecond(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.SECOND);
    }

    /**
     * 返回毫秒
     *
     * @param date
     *            日期
     * @return 返回毫秒
     */
    public static long getMillis(Date date)
    {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.getTimeInMillis();
    }

    /**
     * 日期相加
     *
     * @param date
     *            日期
     * @param day
     *            天数
     * @return 返回相加后的日期
     */
    public static Date addDate(Date date, int day)
    {
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(getMillis(date) + ((long) day) * 24 * 3600 * 1000);
        return c.getTime();
    }

    /**
     * 日期相减
     *
     * @param date
     *            日期
     * @param date1
     *            日期
     * @return 返回相减后的日期
     */
    public static int diffDate(Date date, Date date1)
    {
        return (int) ((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000));
    }

    /**
     * 根据分钟数日期相加
     *
     * @param date
     *            日期
     * @param day
     *            分钟数
     * @return 返回相加后的日期
     */
    public static Date addDateByMinute(Date date, int minute)
    {
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(getMillis(date) + ((long) minute) * 60 * 1000);
        return c.getTime();
    }

    /**
     * 控制台输出日志
     *
     * @param sMsg
     * @return void
     */
    public static void watchLog(String sMsg)
    {
        System.out.println(formatDateByFormat(new Date(), "yyyy-MM-dd HH:mm:ss") + " " + sMsg);
    }

    /**
     *  转换格式为日期
     * @param dateTime
     * @return
     */
    public static Date parseDateTime(String dateTime){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
            Date date = sdf.parse(dateTime);
            return date;
        } catch (ParseException e) {
            logger.error("{}",e);
            return null;
        }
    }


    /**
     *  转换格式为日期
     * @param dateTime
     * @return
     */
    public static Date parseGpsDateTime(String dateTime){
        SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy-HHmmss");
        try {
            Date date = sdf.parse(dateTime);
            return date;
        } catch (ParseException e) {
            logger.error("{}",e);
            return null;
        }
    }

    /**
     * 日期增加指定的小时
     * @param date
     * @param hour
     * @return
     */
    public static Date addDateHour(Date date,int hour){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);//date 换成已经已知的Date对象
        cal.add(Calendar.HOUR_OF_DAY, hour);// before 8 hour
        return cal.getTime();
    }


    public static Date str2Date(String str)
    {
        //指定日期格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try{
            date = format.parse(str);
            return date;
        }catch(Exception e)
        {
            //parse error
            return null;
        }

    }

    public static void main(String[] args) {
        Date ss = MyDate.parseGpsDateTime("24092069-181400");

        System.out.println(ss);

        Calendar cal = Calendar.getInstance();
        cal.setTime(ss);//date 换成已经已知的Date对象
        cal.add(Calendar.HOUR_OF_DAY, 8);// before 8 hour
        System.out.println(cal.getTime());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(format.format(cal.getTime()));

        String dateTimeUtc = "240919-111400";
        String dateTime = dateTimeUtc.substring(0,4) + "20" + dateTimeUtc.substring(4,6) + dateTimeUtc.substring(6);
        System.out.println(dateTime);

        String sss = "00001000";
        System.out.println(sss.substring(0,1));
        System.out.println(sss.substring(1,2));
        System.out.println(sss.substring(2,3));
        System.out.println(sss.substring(3,4));
        System.out.println(sss.substring(4,5));
        System.out.println(sss.substring(5,6));
        System.out.println(sss.substring(6,7));
        System.out.println(sss.substring(7,8));

    }
}
